/*
 * 文件名：PushManager.java	 
 * 时     间：上午10:56:47
 * 作     者：lyf       
 * 版     权： 2012-2022 湖南智软网络科技, 公司保留所有权利.
 * 联     系：http://www.073586.com/
 */
package com.cz073586.message.websocket356.push;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.websocket.DeploymentException;
import javax.websocket.EncodeException;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;

import com.cz073586.message.websocket356.client.WebSoceketClient;
import com.cz073586.message.websocket356.transfer.TransferVo;
import com.cz073586.tools.util.Log4jUtil;
import com.cz073586.tools.util.ResourceUtil;

/**
 * 类描述: 推送管理器,共享session
 * 
 * @ClassName: PushManager
 * @author Administrator
 * @date 2015年7月21日 上午10:56:47
 */
public class PushManager
{
	
	private final static Log4jUtil log = Log4jUtil.getLog4j(PushManager.class);
	private static PushManager instance;
	
	javax.websocket.WebSocketContainer container = javax.websocket.ContainerProvider
			.getWebSocketContainer();
	/**
	 * websocet session
	 */
	private Session session;
	
	/**
	 * 标记session状态,1标示正常,2 标示在设置值
	 */
	private int status = 2;
	
	private PushManager()
	{
		
	}
	
	/**
	 * 
	 * 方法描述：
	 * 
	 * @Title: instance
	 * @param @return
	 * @return PushManager
	 * @user lyf 2015年7月21日
	 * @throws
	 */
	public static PushManager instance()
	{
		if (null == instance)
		{
			instance = new PushManager();
		}
		return instance;
	}
	
	public void setSession(Session session)
	{
		this.session = session;
	}
	
	/**
	 * 
	 * 方法描述： 初始化socket客户端
	 * 
	 * @Title: iniClient
	 * @param
	 * @return void
	 * @user lyf 2015年7月21日
	 * @throws
	 */
	private void iniClient()
	{
		
		try
		{
			String serverUri = ResourceUtil.getValueByKey(
					"push_config/push_config.properties", "server_uri");
			container.connectToServer(WebSoceketClient.class,
					new URI(serverUri));
		} catch (DeploymentException e)
		{
			log.error("Deployment", e);
		} catch (IOException e)
		{
			log.error("IO", e);
		} catch (URISyntaxException e)
		{
			log.error("URISyntaxException", e);
		}
	}
	
	/**
	 * @throws EncodeException
	 * @throws IOException
	 * 
	 *             方法描述： 发送消息
	 * 
	 * @Title: pushMessage
	 * @param @param object
	 * @return void
	 * @user lyf 2015年7月21日
	 * @throws
	 */
	public synchronized void pushMessage(TransferVo<?> object)
			throws IOException, EncodeException
	{
		if (this.status == 2)
		{
			iniClient();
		}
		
		RemoteEndpoint.Basic other = session.getBasicRemote();
		other.sendObject(object);
	}
	
	public int getStatus()
	{
		return status;
	}
	
	public void setStatus(int status)
	{
		this.status = status;
	}
	
}
